             package com.java.diagnostics.visualizer.recommender.balanced;
             
             import com.java.diagnostics.visualizer.data.AggregateData;
             import com.java.diagnostics.visualizer.data.DataPoint;
             import com.java.diagnostics.visualizer.data.StructuredData;
             import com.java.diagnostics.visualizer.data.TupleData;
             import com.java.diagnostics.visualizer.recommender.Recommendation;
             import com.java.diagnostics.visualizer.recommender.RecommendationBase;
             import com.java.diagnostics.visualizer.recommender.util.RecommendationLabels;
             import java.util.Map;
             
             public class NumaNonLocalPercentWarning
               extends RecommendationBase
               implements Recommendation
             {
               public void recommend(AggregateData data)
               {
                 StructuredData attributes = data
                   .getStructuredData("VGCLabels.gc.attributes");
                 
                 if (attributes != null) {
                   String numaNodes = (String)attributes.getContents().get(
                     "numaNodes");
                   
                   if (numaNodes != null) {
                     double nodes = Double.parseDouble(numaNodes);
                     
                     if (nodes > 1.0D) {
                       double threshold = (nodes - 1.0D) / nodes * 100.0D;
                       TupleData nonLocalPercent = data
                         .getTupleData("VGCLabels.non.local.percent.numa");
                       
                       if (nonLocalPercent != null) {
                         DataPoint[] nonLocalPercentPoints = nonLocalPercent
                           .getDataPoints();
                         for (DataPoint percent : nonLocalPercentPoints) {
                           if (percent.getRawY() > threshold) {
                             addProblem(data, 
                               RecommendationLabels.UNEVEN_NUMA_NODES);
                             return;
                           }
                         }
                       }
                     }
                   }
                 }
               }
             }


